const cluster = require('cluster');
const os = require('os');

if(cluster.isMaster){
  // cluster.fork();
  // cluster.fork();
  // cluster.fork();
  // 压测 基本上rps(request per second) 数和fork的数量(前提是cpu够的话)是成正比的

  for( let i=0;i<os.cpus().length;++i) {
    cluster.fork();
  }

  /** 关于进程数和核数*/
  // node.js并不是完全单核的 因为lbuv库它会开启很多work线程(参看libuv.png) 而一个cpu同一时间只会执行一个线程程序
  // 故没必要把所有cpu全部占满
  // 并且fork进程 都会把node进程复制一遍内存空间代码空间 造成了成倍的内存消耗 但是带来的cpu的节省效果却没有成倍的增长 所以说没有必要把子进程的数目和核数一样多 一般大概cpu除以2(再适当加1、2,可以用压测测试出来,以rps最为指标)


  /** 关于port */
  // 这里有个问题 为什么同一个端口可以被监听多次？ 照理说除了第一个进程 后面的全会报错 但为什么没有呢?
  // 实际上只有一个进程监听了该端口 然后通过进程间通信 合作完成对请求的处理 (每个进程作为一个worker,有一个worker池,当请求来了会让空闲的worker去接待)
}else {
  require('./http');
}
